/*
 * Copyright (c) 2013-2018 上海汇数数据. All rights reserved.
 * @(#) AsymmetricCipherApi.java 2018-08-06 17:26
 */

package cn.jh.common.core.crypto;

import java.security.PrivateKey;
import java.security.PublicKey;


/**
 * 公钥加密算法接口（又称 非对称加密算法 [Asymmetric cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography)）
 * 公钥加密算法，通常是公钥加密，私钥解密；但是有一个例外，RSA算法，私钥加密，公钥能解密。
 * 对数据签名，则是私钥签名，公钥验证。
 *
 * @author Fuchun
 * @since  1.0
 */
public interface AsymmetricCipherApi extends CipherApi {

    /**
     * 使用指定的私钥对给定的内容进行数据签名。
     *
     * @param content 要签名的数据。
     * @param privateKey 用于签名的私钥。
     * @return 签名操作结果的签名字节。
     * @throws IllegalArgumentException 如果参数 {@code content == null || privateKey == null}
     */
    byte[] sign(byte[] content, PrivateKey privateKey) throws CryptoException;

    /**
     * 验证指定的数据的签名。
     * 此方法不会抛出任何异常，内部执行过程中，无论发生任何异常或错误，均返回 {@code false}。
     *
     * @param content 要验证的数据。
     * @param sign 要验证的签名字节。
     * @param publicKey 验证签名的公钥。
     * @return 如果签名得到验证，则返回 {@code true}，否则将返回 {@code false}。
     */
    boolean verify(byte[] content, byte[] sign, PublicKey publicKey);
}
